package com.yc.blog.lambda;

import java.util.function.Function;

public class TestLambda {
	
	String name = "张三";
	static String name_s = "李四";
	
	/**
	 * 测试作用范围1：可以引用成员变量/静态成员变量
	 * 测试结果：编译成功
	 */
	public void testScope1() {
		Function<String, String> function1 = p -> name;
		Function<String, String> function2 = p -> name_s;
	}
	
	/**
	 * 测试作用范围2：可以引用局部变量
	 * 测试结果：编译成功
	 */
	public void testScope2() {
		String name_n = "王五";
		Function<String, String> function1 = p -> name_n;
	}
	
	/**
	 * 测试作用范围3：可以引用局部变量，但不允许修改
	 * 测试结果：编译失败
	 */
	public void testScope3() {
		String name_n = "王五";
		//编译报错：Local variable name_n defined in an enclosing scope must be final or effectively final
		//翻译：本地变量 name_n 定义在一个闭包范围内必须是final或者“表现出final”（意思是虽然可能不是final，但我们不去修改就没问题）
//		Function<String, String> function1 = p -> name_n;
		name_n = "王五2";
	}
	
	/**
	 * 测试作用范围4：可以引用成员变量，允许修改
	 * 测试结果：编译成功
	 */
	public void testScope4() {
		Function<String, String> function1 = p -> name;
		Function<String, String> function2 = p -> name_s;
		name = "张三2";
		name_s = "李四2";
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}
